﻿namespace System
{
    /// <summary>
    /// Методы-расширения класса <see cref="T:System.String">строк</see>
    /// </summary>
    public static class StringExtentions
    {
        /// <summary>Проверка строки на пустоту, либо нулевую ссылку</summary>
        /// <param name="Str">Проверяемая строка</param>
        /// <returns>Истина, если трока пуста, либо если передана нулевая ссылка</returns>
        [Diagnostics.DebuggerStepThrough]
        public static bool IsNullOrEmpty(this string Str)
        {
            return string.IsNullOrEmpty(Str);
        }

        public static string ClerSymbolsAtBegin(this string str, params char[] symbols)
        {
            var i = 0;
            var len = str.Length;
            while(i < len && symbols.IsContains(str[i])) i++;

            return i == 0 || len == 0 ? str : str.Substring(i, len - i);
        }

        public static string ClerSymbolsAtEnd(this string str, params char[] symbols)
        {
            var len = str.Length;
            var i = 0;
            while(i < len && symbols.IsContains(str[len - i - 1])) i++;

            return len == 0 || i == 0 ? str : str.Substring(0, len - i);
        }

        public static string ClearSymbolsAtBeginAndEnd(this string str, params char[] symbols)
        {
            return str.ClerSymbolsAtBegin(symbols).ClerSymbolsAtEnd(symbols);
        }

        public static string ClearSystemSymbolsAtBeginAndEnd(this string str)
        {
            return str.ClearSymbolsAtBeginAndEnd(' ', '\n', '\r');
        }

    }
}
